package modelo.servicio;

import java.util.List;
import modelo.bd.dao.UsuarioDAO;
import modelo.bd.excepcion.DAOException;
import modelo.dominio.Usuario;

public class Usuarios {

    private static Usuarios instancia;
    private UsuarioDAO dao;

    private Usuarios() {
        this.dao = new UsuarioDAO();
    }

    public static Usuarios instancia() {
        if (instancia == null) {
            instancia = new Usuarios();
        }
        return instancia;
    }

    public boolean loginValido(String loginUsuario, String contrasena)
            throws DAOException {
        return dao.validaUsuario(loginUsuario, contrasena);
    }

    public Usuario obtenerPorLogin(String login) 
            throws DAOException {
        return dao.selectWhere("UPPER(LOGIN) = UPPER('" + login + "')").get(0);

    }

    @Override
    protected Object clone() 
            throws CloneNotSupportedException {
        return new CloneNotSupportedException("No se puede clonar Usuarios.");
    }
    
    public List<Usuario> obtenerPorRango(int desde, int hasta, Integer area) 
            throws DAOException {
        return dao.selectPag(desde, hasta, area);
    }
    
    public int obtenerTotal(Integer area) 
            throws DAOException {
        return dao.selectCount(area);
    }

    public void eliminar(String login) 
            throws DAOException {
        dao.deleteWhere("LOGIN = '" + login + "'");
    }

    public void agregar(Usuario usu) 
            throws DAOException {
        dao.add(usu);
    }

    public void actualizar(Usuario usu) 
            throws DAOException {
        dao.update(usu);
    }
    
    public boolean cambiarContrasena(String login, String contraActual, String contraNueva) 
            throws DAOException{
        return dao.cambiarContrasena(login, contraActual, contraNueva);
    }
    
    public String restaurarContrasena(String login) 
            throws DAOException{
        return dao.restaurarContrasena(login);
    }

    public boolean existe(String login) 
            throws DAOException {
        return !dao.selectWhere("UPPER(LOGIN) = UPPER('" + login + "')").isEmpty();
    }

}
